Почему отправленное письмо с помощью php скрипта попадает в спам?

Всем привет. Прошу помощи.
У меня есть скрипт, который написан на php и он при обращении к нему из js по ajax отправляет сообщение на почту, но само сообщение попадает в спам, почему?

Вот сам код php:
<?php
$method = $_SERVER['REQUEST_METHOD'];
$c = true;
if ( $method === 'POST' ) {
	$project_name = trim($_POST["project_name"]);
	$admin_email  = trim($_POST["admin_email"]);
	$form_subject = trim($_POST["form_subject"]);
	foreach ( $_POST as $key => $value ) {
		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
			$message .= "
			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
			</tr>
			";
		}
	}
} else if ( $method === 'GET' ) {
	$project_name = trim($_GET["project_name"]);
	$admin_email  = trim($_GET["admin_email"]);
	$form_subject = trim($_GET["form_subject"]);
	foreach ( $_GET as $key => $value ) {
		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
			$message .= "
			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
			</tr>
			";
		}
	}
}
$message = "<table style='width: 100%;'>$message</table>";
function adopt($text) {
	return '=?UTF-8?B?'.Base64_encode($text).'?=';
}
$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;
mail($admin_email, adopt($form_subject), $message, $headers );


А вот само обращение по ajax:
$("#call").submit(function() {
        var th = $(this);
        $.ajax({
            type: "POST",
            url: "mail.php",
            data: th.serialize()
        }).done(function() {
            alert("Заявка отправлена! Скоро мы с вами свяжемся.");
            setTimeout(function() {
                th.trigger("reset");
            }, 1000);
        });
        return false;
    });


Проверял ip в спам базах, отсутствует. Как быть?
  • Вопрос задан
  • 4179 просмотров
Пригласить эксперта
Ответы на вопрос 8
bitniks
@bitniks
Go/PHP/Symfony developer
Проблемы могут быть разные. Проверить письма на спам можно с помощью этого сервиса
https://www.mail-tester.com

Он проведет проверку письма и выдаст список проблем и советы, как их исправить
Ответ написан
Комментировать
@aleks-th
В двух словах и не скажешь.

Во первых гугл, маил и яндекс реагируют на содержимое письма, достаточно письмо с одним и тем же содержимим многим клиентам разослать и попадание в спам обеспечено.
Во вторых там много параметров учитывается кроме ip.
Например PTR запись желательна . Без нее быстрее в спам попадаешь.

Потом почтовики палят ставят ли галку спам пользователи , если пользователь занес вас в спам то к этому тексту уже более подозрительное отношение.

--
Вот человек достаточно подробно писал про рассылки
https://habr.com/ru/company/mailru/blog/419591/

---

Ну или как простой вариант, слать через учетку в том же яндексе, используя их сервер, шансов что заблочат меньше.
Ответ написан
Комментировать
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Функцию mail многие почты вообще не принимают из-за соображений безопасности, в нем можно понаставить любые имена и email отправителя и вводить в заблуждение пользователей. Если хотите что бы почта попадала в основную папку, пользуйтесь phpmailer.
Ответ написан
@vanyamba-electronics
Спам и есть потому что.
Ответ написан
Комментировать
alex-1917
@alex-1917
Если ответ помог, отметь решением
На Тостере погугли, 29 раз уже вопрос поднимался и 6 раз был удачно разжеван и решен!
Ответ написан
Комментировать
@bios06
Шли через smtp протокол. Можно через Гугл или яндекс. Правда там есть ограничения.
Ответ написан
Комментировать
lamo4ok
@lamo4ok
Программист
Код, который вы используете, шлёт письма без авторизации на каком-либо из почтовых серверов. Если только у вас не настроена отправка с авторизацией по ip. Чтобы вашим письмам доверяли, необходимо множество вещей, если вы захотите настроить свой собственный почтовый сервер, и только одна, если вы будете делать авторизацию на каком-либо уже настроенном публичном. Домен при этом может быть в адресе отправителя либо ваш, либо, если это не принципиально, этого публичного сервера. Про настройку своего домена на Яндексе или где-то ещё написано немало. В итоге вам нужен скрипт, который будет уметь в авторизацию по SMTP. Выше уже говорили про стандарт в таких вещах, phpmailer. Найдите примеры его использования, и все.
Ответ написан
Комментировать
Нужно на своем почтовом сервере прописать:
- SPF-запись;
- DKIM-запись;
- DMARC-запись (не обязательно, но желательно).
Подробнее см. здесь:
https://help.mail.ru/postmaster/technical-settings...
(Настройка SPF, DKIM, DMARC)
или здесь:
https://sendpulse.com/ru/knowledge-base/email-serv...
(Как настроить аутентификацию email сообщений)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы